package com.sk.seckilldemo.util;

import com.sk.seckilldemo.enums.ResultCodeEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 统一响应对象
 * RestFul风格
 * */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Response {
    private Integer code; //状态码
    private String message; //消息
    private Object data; //数据

    /**
     * 成功响应静态方法
     * */
    public static Response success(){
        return new Response(200,ResultCodeEnum.SUCCESS.getMsg(),null);
    }

    /**
     * 成功响应静态方法，重载方法1
     * 带参数
     * */
    public static Response success(Object data){
        return new Response(200,ResultCodeEnum.SUCCESS.getMsg(),data);
    }

    /**
     * 成功响应静态方法，重载方法2
     * 带参数
     * */
    public static Response success(Integer code,String msg){
        return new Response(code,msg,null);
    }

    /**
     * 成功响应静态方法，重载方法3
     * 带参数
     * */
    public static Response success(Integer code,String msg,Object data){
        return new Response(code,msg,data);
    }

    /**
     * 成功响应静态方法，重载方法4
     * 带参数
     * */
    public static Response success(ResultCodeEnum resultCode, Object data) {
        return new Response(resultCode.getCode(), resultCode.getMsg(), data);
    }

    /**
     * 成功响应静态方法，重载方法5
     * 带参数
     * */
    public static Response success(ResultCodeEnum resultCode) {
        return new Response(resultCode.getCode(), resultCode.getMsg(), null);
    }

    /**
     * 系统错误响应
     * */
    public static Response error(){
        return new Response(500,ResultCodeEnum.SYSTEM_ERROR.getMsg(),null);
    }

    /**
     * 自定义响应错误方法
     * */
    public static Response error(Integer code,String msg){
        return new Response(code,msg,null);
    }

    /**
     * 自定义响应错误方法 重载方法1
     * */
    public static Response error(ResultCodeEnum resultCode, Object data) {
        return new Response(resultCode.getCode(), resultCode.getMsg(), data);
    }

    /**
     * 自定义响应错误方法 重载方法
     * */
    public static Response error(ResultCodeEnum resultCode) {
        return new Response(resultCode.getCode(), resultCode.getMsg(), null);
    }

    /**
     * 自定义响应错误方法 重载方法
     * */

    public static Response error(Object data){
        return new Response(500,ResultCodeEnum.SYSTEM_ERROR.getMsg(),data);
    }



    /**
     * 库存不足错误响应
     * */
    public static Response stockNotEnough(){
        return new Response(4001,ResultCodeEnum.STOCK_NOT_ENOUGH.getMsg(), null);
    }
}
